查看原文
其他

大邓 2018-05-24

pyvis是专为关系网络而生,使用javascript渲染,所以效果比networkx更加的炫酷。当然使用javascript渲染的也有很多,比如pyecharts也可以处理关系网络,不过生成的节点不可以单独拖拽。 

pyecharts与pyvis区别

具体可看下面的效果,红色为pyecharts,蓝色为pyvis


语法与networkx近似,只要熟悉networkx就能很快使用pyvis。

一、导入Network

from pyvis.network import Network net = Network()

二、添加节点

#添加单个节点
net.add_node(1, label='Node 1')
net.add_node(2, label='Node 2')

三、添加属性

#注意这里是添加多个节点,使用add_nodes
#属性值传入的是列表,要保证列表长度与节点列表长度一致
net.add_nodes([3,4,5],              value=[10,20,30],              title=["I am node 3", "node 4 here", "and im node 5"],              x=[21.4, 54.2, 11.2],              y=[100.2, 23.54, 32.1],              label=["NODE 3", "NODE 4", "NODE 5"],              color=["#00ff1e", "#162347", "#dd4b39"])

#显示,输出为demo1.html
net.show('demo1.html')


四、添加边

#一次添加一条边
net.add_edge(1, 2)
net.add_edge(1, 3)
net.add_edge(1, 4)

#有权重边
net.add_edge(2, 1, wright=0.87)

#显示,输出为demo1.html
net.show('demo1.html')


五、结合networkx使用

from pyvis.network import Network
import networkx as nx

#生成5个节点,每个点与其他所有点相互联系
nxg = nx.complete_graph(5)
G = Network()
G.from_nx(nxg)

#输出并生成demo2.html
G.show('demo2.html')


六、交互调整

nxg = nx.complete_graph(5)
G = Network()G.from_nx(nxg)

#可对打开的html进行调整
G.show_buttons(filter_=['physics'])
G.show('demo3.html')


七、可在notebook中渲染

#pyvis可在Jupyter中渲染
from pyvis.network import Network
import networkx as nx G = Network(notebook=True)
nxg = nx.complete_graph(10)
G.from_nx(nxg)G.show('example.html')


八、权利游戏人物关系网络图

from pyvis.network import Network
import pandas as pd got_net = Network(notebook=True, height="750px", width="750px", bgcolor="#222222", font_color="white")

# 这是pyvis中的文档,但是却没有这个barnes_hut方法的任何说明
# 这里我理解成一个用来存放边数据的特殊空集合
got_net.barnes_hut()

got_data = pd.read_csv("stormofswords.csv")
sources = got_data['Source']
targets = got_data['Target']
weights = got_data['Weight']

edge_data = zip(sources, targets, weights)

for e in edge_data:    src = e[0]    dst = e[1]    w = e[2]        #往空集合中添加节点和边    got_net.add_node(src, src, title=src)    got_net.add_node(dst, dst, title=dst)    got_net.add_edge(src, dst, value=w)

#对空集合中的数据进行处理,去重
neighbor_map = got_net.get_adj_list()

#让每个节点显示周围的相邻的人物关系
for node in got_net.nodes:    node["title"] += " Neighbors:<br>" + "<br>".join(neighbor_map[node["id"]])    
   node["value"] = len(neighbor_map[node["id"]])

got_net.show("gameofthrones.html")



项目代码下载

链接: https://pan.baidu.com/s/1o3BGGBaNiids4jqGQRJ4hA 密码: hsjh


如果您还有疑问,可扫下方小程序码向大邓提问,大邓知无不言言无不尽!

往期文章

100G Python学习资料:从入门到精通! 免费下载  

上百G文本数据集等你来认领|免费领取

为什么你要为2019,而不是2018做计划?    

2017年度15个最好的数据科学领域Python库 

初识K-means算法  

机器学习|八大步骤解决90%的NLP问题 

复杂嵌套字典数据结构处理库-glom

读取pdf和docx文件,亲测有效

如何从文本中提取特征信息? 

对于中文,nltk能做哪些事情 

留在网上的每个字,都在泄露你的身份

优雅简洁的列表推导式

Get小技巧等分列表

如何对数据进行各种排序?

【视频讲解】Scrapy递归抓取简书用户信息

美团商家信息采集神器 

用chardect库解决网页乱码问题

gevent:异步理论与实战  

轻盈高效的异步访问库grequests库

selenium驱动器配置详解

爬虫神器PyQuery的使用方法

简易SQLite3数据库学习

Python通过字符串调用函数

Python圈中的符号计算库-Sympy

Python中处理日期时间库的使用方法 




    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存